# 三、 字符串拓展

# 3.1 字符串的三种定义方式

# 1. 单引号定义法
print('单引号定义法')

# 2. 双引号定义法(常用)
print("双引号定义法")

# 3. 三引号定义法, 这个和多行注释的写法是一样的
# 注意三引号定义法会识别空格
name="""
今天是2024-10-13
下午的15:32分
我在学习Python
"""
print(name)

# 3.2 字符串的引号嵌套
# 如果定义的字符串本身包含单引号、双引号自身怎么办？
"""
三种解决方法：
1. 如果定义的字符串本身包含单引号,就使用双引号定义法
2. 如果定义的字符串本身包含双引号,就使用单引号定义法
3. 使用转义字符 向右的斜杆,使其转义为普通字符
"""
print('你说:"我帅吗"')
print("你说:'我帅吗'")
print("你说:\"我帅吗\"")

# 3.3 字符串拼接
# 如果有两个字符串，可以通过’+‘号将其拼接乘一个字符串
# 常用于字面量和变量直接的拼接、变量和变量之间
# 注意: 字符串不能通过+号和整数或者其他类型进行拼接，说白了只能适用于字符串本身
words = "今天是"
date = "2024-10-13"
today = words + date
print(today)

# 3.4 字符串格式化 (可以和其他类型完成拼接)
"""
使用占位的方式: %s
%表示我要占位
s表示字符串需要放入的地方
所以，综合起来就是：我先占个位，等一下会有一个字符串过来
"""
# 拼接符号改为了 %
tt = "hello %s" % "wj"
print(tt)

# 如果需要拼接多份，%后面需要使用括号，括号内就是拼接的内容
dd = "hello %s, 我的id是%s" % ("wj", 3) # 这里的数字占位的时候是%s的形式，所以这里是自动转化成了字符串，然后才完成拼接
print(dd)

# 其它类型占位
"""
格式符     转化
%s        将内容转化为字符串，放入占位的位置
%d        将内容转化为整数，放入占位的位置
%f        将内容转化为浮点数，放入占位的位置
"""
gg = "hello %s, 你的学号是: %d, 你的分数是: %f" % ("wj", 3, 100.0)
print(gg)

# 3.5 格式化的精度控制
"""
可以使用m.n来控制数据的宽度和精度
* m: 控制宽度，设置的数字小于数字本身的宽度则不生效（很少用）
* .n: 控制小数点的精度，注意会进行四舍五入

比如
%5d: 表示将整数的宽度控制在5位，如数字11，被设置为5d，就会变成[空格][空格][空格]11，默认使用3个空格补足宽度
%5.2f:表示将宽度控制为5，将小数点精度设置为2。
    小数点和小数部分也算入宽度计算。如，对11.345设置了%7.2f后，结果是:[空格][空格]11.35。2个空格补足宽度，
    小数部分限制2位精度后，四舍五入为.35

"""
gg = "hello %s, 你的学号是: %d, 你的分数是: %.2f" % ("wj", 3, 99.999)
print(gg)

# 3.6 字符串格式方式2
"""
更加优雅的格式化方式：快速格式化
语法：f"{变量名}" -> 其中，字符串前面的f(format)表示对字符串做一个标记，表示这个字符串将会进行格式化。而{}就表示占位符了
特点: 变量存的是什么数据，就原样输出什么数据(不会做精度控制)
"""
name = "wj"
print(f"hello {name}")

# 3.7 对表达式进行格式化
# 3.7.1 什么是表达式
# 一条具有明确执行结果的代码语句
print("1 * 1 = %d" % (1 * 1)) # 百分号占位符的形式
print(f"1 * 1 = {1 * 1}") # 快速格式化